From 124b790a77e4852544184971fc7ae248acae0713 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 12 Aug 2017 09:36:49 -0400 Subject: [PATCH] Fix a bootstrapping problem without root windows We create various windows during the initial creation of display objects, which causes some bootstrapping issues when we try to find the default screen to get its root window. To work around this, pass the display object into gdk_window_new. This is not an API change, since gdk_window_new is no longer public API. --- gdk/gdkinternals.h | 3 ++- gdk/gdkwindow.c | 16 +++++++--------- gdk/wayland/gdkwindow-wayland.c | 3 ++- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h index acff6f0da2..537741bf2a 100644 --- a/gdk/gdkinternals.h +++ b/gdk/gdkinternals.h @@ -368,7 +368,8 @@ void gdk_cairo_set_drawing_context (cairo_t *cr, cairo_surface_t * _gdk_window_ref_cairo_surface (GdkWindow *window); -GdkWindow* gdk_window_new (GdkWindow *parent, +GdkWindow* gdk_window_new (GdkDisplay *display, + GdkWindow *parent, GdkWindowAttr *attributes); void _gdk_window_destroy (GdkWindow *window, gboolean foreign_destroy); diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 0d6a82fba2..010a27ea7d 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -976,12 +976,12 @@ get_native_event_mask (GdkWindow *private) } GdkWindow* -gdk_window_new (GdkWindow *parent, +gdk_window_new (GdkDisplay *display, + GdkWindow *parent, GdkWindowAttr *attributes) { GdkWindow *window; GdkScreen *screen; - GdkDisplay *display; gboolean native; GdkEventMask event_mask; @@ -989,7 +989,7 @@ gdk_window_new (GdkWindow *parent, if (!parent) { - screen = gdk_screen_get_default (); + screen = gdk_display_get_default_screen (display); parent = gdk_screen_get_root_window (screen); } else @@ -1003,8 +1003,6 @@ gdk_window_new (GdkWindow *parent, return NULL; } - display = gdk_screen_get_display (screen); - window = _gdk_display_create_window (display); window->parent = parent; @@ -1159,7 +1157,7 @@ gdk_window_new_toplevel (GdkDisplay *display, attr.height = height; attr.window_type = GDK_WINDOW_TOPLEVEL; - return gdk_window_new (NULL, &attr); + return gdk_window_new (display, NULL, &attr); } /** @@ -1193,7 +1191,7 @@ gdk_window_new_popup (GdkDisplay *display, attr.height = position->height; attr.window_type = GDK_WINDOW_TEMP; - return gdk_window_new (NULL, &attr); + return gdk_window_new (display, NULL, &attr); } /** @@ -1224,7 +1222,7 @@ gdk_window_new_temp (GdkDisplay *display) attr.height = 10; attr.window_type = GDK_WINDOW_TEMP; - return gdk_window_new (NULL, &attr); + return gdk_window_new (display, NULL, &attr); } /** @@ -1256,7 +1254,7 @@ gdk_window_new_child (GdkWindow *parent, attr.height = position->height; attr.window_type = GDK_WINDOW_CHILD; - return gdk_window_new (parent, &attr); + return gdk_window_new (gdk_window_get_display (parent), parent, &attr); } /** diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c index b6c4cee159..c304799619 100644 --- a/gdk/wayland/gdkwindow-wayland.c +++ b/gdk/wayland/gdkwindow-wayland.c @@ -3719,7 +3719,8 @@ gdk_wayland_window_new_subsurface (GdkDisplay *display, attr.height = position->height; attr.window_type = GDK_WINDOW_SUBSURFACE; - return gdk_window_new (gdk_screen_get_root_window (gdk_display_get_default_screen (display)), + return gdk_window_new (display, + gdk_screen_get_root_window (gdk_display_get_default_screen (display)), &attr); } -- 2.30.2